package com.captainbank.tcl.tclapplication.utils.glide;

import android.app.Activity;
import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.captainbank.tcl.tclapplication.R;

import java.io.File;

/**
 * Created by TCL on 2019/2/27.
 * Describe:
 */
public class GlideLoader {
    private static GlideLoader glideInstance;

    /**
     * 单例模式
     */
    public static GlideLoader getInstance() {
        if (glideInstance == null) {
            glideInstance = new GlideLoader();
        }
        return glideInstance;
    }

    /**
     * 统一加载方法
     */
    public void initLoadImage(Context context, String url, final ImageView imageView, LoadOption option) {
        if (isValidContextForGlide(context)) {
            switch (option) {
                case LOAD_BANNER:
                    GlideApp.with(context)
                            .load(url)
                            .placeholder(R.mipmap.icon)
                            .error(R.mipmap.icon)
                            .into(imageView);
                    break;

                case LOAD_BIG:
                    GlideApp.with(context)
                            .load(url)
                            .placeholder(R.mipmap.icon)
                            .error(R.mipmap.icon)
                            .into(imageView);
                    break;
                case LOAD_SMALL:
                    GlideApp.with(context)
                            .load(url)
                            .placeholder(R.mipmap.icon)
                            .error(R.mipmap.icon)
                            .into(imageView);
                    break;
                case LOAD_ICON:
                    GlideApp.with(context)
                            .load(url)
                            .placeholder(R.mipmap.icon)
                            .error(R.mipmap.icon)
                            .into(imageView);
                    break;
                case LOAD_AVATAR_TRUE:
                    GlideApp.with(context)
                            .load(url)
                            .placeholder(R.mipmap.icon)
                            .error(R.mipmap.icon)
                            .skipMemoryCache(true)
                            .diskCacheStrategy(DiskCacheStrategy.NONE)
                            .into(imageView);
                    break;
                case LOAD_AVATAR_FALSE:
                    GlideApp.with(context)
                            .load(url)
                            .placeholder(R.mipmap.icon)
                            .error(R.mipmap.icon)
                            .into(imageView);
                    break;

//                case LOAD_BLUR:
//                    GlideApp.with(context)
//                            .load(url)
//                            .apply(bitmapTransform(new BlurTransformation(24, 4)))//模糊度(在0.0到25.0之间)，图片缩放比例(默认1)。
//                            .placeholder(R.mipmap.icon_default_small)
//                            .error(R.mipmap.icon_default_small)
//                            .into(imageView);
//                    break;

//                case LOAD_ROUND:
//                    GlideApp.with(context)
//                            .load(url)
//                            .apply(bitmapTransform(new RoundedCornersTransformation(12, 0)))
//                            .placeholder(R.mipmap.icon)
//                            .error(R.mipmap.icon)
//                            .into(imageView);
//                    break;
            }
        }
    }

    public void initLoadImage(Context context, File file, final ImageView imageView, LoadOption option) {
        if (isValidContextForGlide(context)) {
            switch (option) {
                case LOAD_AVATAR_FILE:
                    GlideApp.with(context)
                            .load(file)
                            .placeholder(R.mipmap.icon)
                            .error(R.mipmap.icon)
                            .into(imageView);
                    break;

            }
        }
    }

    public void initLoadImage(Context context, int fileID, final ImageView imageView, LoadOption option) {
        if (isValidContextForGlide(context)) {
            switch (option) {
                case LOAD_RESOURCES:
                    GlideApp.with(context)
                            .load(fileID)
                            .into(imageView);
                    break;

            }
        }
    }


    //判断context是否为空
    private boolean isValidContextForGlide(Context context) {
        if (context == null) {
            return false;
        }
        if (context instanceof Activity) {
            final Activity activity = (Activity) context;
            if (activity.isDestroyed() || activity.isFinishing()) {
                return false;
            }
        }
        return true;
    }


    /**
     * 清理缓存
     */
    public void clearMemory(final Context context) {
        GlideApp.get(context).clearMemory();  // 在UI线程执行
        new Thread(new Runnable() {
            @Override
            public void run() {
                GlideApp.get(context).clearDiskCache();  // 在子线程执行
            }
        }).start();
    }

    public enum LoadOption {
        LOAD_BANNER, // banner
        LOAD_BIG, // 默认图：大
        LOAD_SMALL, // 默认图：小
        LOAD_ICON, // 默认图：icon
        LOAD_AVATAR_TRUE, // 头像跳过缓存：true
        LOAD_AVATAR_FALSE, // 头像跳过缓存：false
        LOAD_AVATAR_FILE, // 文件头像
        LOAD_RESOURCES, // 资源ID

        LOAD_GIF,    // GIF
        LOAD_ROUND,    // 圆角
        LOAD_BLUR    // 毛玻璃
    }
}
